package com.igogogo.utils;

import java.util.ArrayList;
import java.util.List;

import com.igogogo.tbkrequest.TbkRequest;
import com.taobao.api.ApiException;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.JuItemsSearchRequest;
import com.taobao.api.request.JuItemsSearchRequest.TopItemQuery;
import com.taobao.api.request.TbkCouponGetRequest;
import com.taobao.api.request.TbkDgItemCouponGetRequest;
import com.taobao.api.request.TbkItemGetRequest;
import com.taobao.api.request.TbkItemInfoGetRequest;
import com.taobao.api.request.TbkItemRecommendGetRequest;
import com.taobao.api.request.TbkJuTqgGetRequest;
import com.taobao.api.request.TbkShopGetRequest;
import com.taobao.api.request.TbkShopRecommendGetRequest;
import com.taobao.api.request.TbkSpreadGetRequest;
import com.taobao.api.request.TbkSpreadGetRequest.TbkSpreadRequest;
import com.taobao.api.request.TbkTpwdCreateRequest;
import com.taobao.api.response.JuItemsSearchResponse;
import com.taobao.api.response.TbkCouponGetResponse;
import com.taobao.api.response.TbkDgItemCouponGetResponse;
import com.taobao.api.response.TbkItemGetResponse;
import com.taobao.api.response.TbkItemInfoGetResponse;
import com.taobao.api.response.TbkItemRecommendGetResponse;
import com.taobao.api.response.TbkJuTqgGetResponse;
import com.taobao.api.response.TbkShopGetResponse;
import com.taobao.api.response.TbkShopRecommendGetResponse;
import com.taobao.api.response.TbkSpreadGetResponse;
import com.taobao.api.response.TbkTpwdCreateResponse;

public class TbkUtils {

	private static final String BASE_URL = ResoureceUtils.getPropValue("BASE_URL");
	private static final String APP_KEY = ResoureceUtils.getPropValue("APP_KEY");
	private static final String APP_SECRET = ResoureceUtils.getPropValue("APP_SECRET");
	private static final String AdzoneId = ResoureceUtils.getPropValue("AdzoneId");
	private static final String UserId = ResoureceUtils.getPropValue("UserId");
	private static final String PID = ResoureceUtils.getPropValue("PID");
	private static TaobaoClient CLIENT = null;

	static {
		CLIENT = new DefaultTaobaoClient(BASE_URL, APP_KEY, APP_SECRET);
	}

	/**
	 * taobao.ju.items.search (聚划算商品搜索接口)
	 * 
	 * @param current_page
	 *            页码,必传
	 * @param page_size
	 *            一页大小,必传
	 * @param word
	 *            搜索关键词,可不传
	 * 
	 */
	public static JuItemsSearchResponse queryJHS(TopItemQuery request) {
		JuItemsSearchRequest req = new JuItemsSearchRequest();
		request.setCurrentPage(request.getCurrentPage());
		request.setPageSize(request.getPageSize());
		request.setPid(PID);
		request.setPostage(true);
		request.setStatus(2L);
		request.setWord(request.getWord());
		req.setParamTopItemQuery(request);
		try {
			return CLIENT.execute(req);
		} catch (ApiException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * taobao.tbk.coupon.get (阿里妈妈推广券信息查询)
	 * 
	 * @param me
	 *            带券ID与商品ID的加密串
	 */
	public static TbkCouponGetResponse queryCoupon(TbkRequest request) {
		TbkCouponGetRequest req = new TbkCouponGetRequest();
		req.setMe(request.getMe());
		try {
			return CLIENT.execute(req);
		} catch (ApiException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * taobao.tbk.tpwd.create (淘宝客淘口令)
	 * 
	 * @param text
	 *            口令弹框内容 (商品名称)
	 * @param url
	 *            口令跳转目标页(领卷页面)
	 * @param logo
	 *            口令弹框logoURL(商品图片)
	 */
	public static TbkTpwdCreateResponse queryTpwdCreate(TbkTpwdCreateRequest request) {
		TbkTpwdCreateRequest req = new TbkTpwdCreateRequest();
		req.setUserId(UserId);
		req.setText(request.getText());
		req.setUrl(request.getUrl());
		req.setLogo(request.getLogo());
		req.setExt("{}");
		try {
			return CLIENT.execute(req);
		} catch (ApiException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * taobao.tbk.spread.get (物料传播方式获取) 现阶段只支持短连接。
	 * 
	 * @param urls
	 *            原始url, 只支持uland.taobao.com，s.click.taobao.com，
	 *            ai.taobao.com，temai.taobao.com的域名转换，否则判错
	 */
	public static TbkSpreadGetResponse querySpread(TbkRequest urls) {
		TbkSpreadGetRequest req = new TbkSpreadGetRequest();
		List<TbkSpreadRequest> list2 = new ArrayList<TbkSpreadRequest>();
		for (int i = 0; i < urls.getUrls().length; i++) {
			TbkSpreadRequest spreadRequest = new TbkSpreadRequest();
			spreadRequest.setUrl(urls.getUrls()[i]);
			list2.add(spreadRequest);
		}
		req.setRequests(list2);
		try {
			return CLIENT.execute(req);
		} catch (ApiException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * taobao.tbk.ju.tqg.get (淘抢购api)
	 * 
	 * @param start_time
	 *            最早开团时间
	 * @param end_time
	 *            最晚开团时间
	 * @param page_no
	 *            第几页，默认1，1~100
	 * @param page_size
	 *            页大小，默认40，1~40
	 */
	public static TbkJuTqgGetResponse queryTqg(TbkJuTqgGetRequest request) {
		TbkJuTqgGetRequest req = new TbkJuTqgGetRequest();
		req.setAdzoneId(new Long(AdzoneId));
		req.setFields(
				"click_url,pic_url,reserve_price,zk_final_price,total_amount,sold_num,title,category_name,start_time,end_time");
		req.setStartTime(request.getStartTime());
		req.setEndTime(request.getEndTime());
		req.setPageNo(request.getPageNo());
		req.setPageSize(request.getPageSize());
		try {
			return CLIENT.execute(req);
		} catch (ApiException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * taobao.tbk.shop.recommend.get (淘宝客店铺关联推荐查询)
	 * 
	 * @param user_id
	 *            卖家Id
	 * @param count
	 *            返回数量，默认20，最大值40
	 * @param platform
	 *            链接形式：1：PC，2：无线，默认：１
	 */
	public static TbkShopRecommendGetResponse queryShopRecommend(TbkShopRecommendGetRequest request) {
		TbkShopRecommendGetRequest req = new TbkShopRecommendGetRequest();
		req.setFields("user_id,shop_title,shop_type,seller_nick,pict_url,shop_url");
		req.setUserId(request.getUserId());
		req.setCount(request.getCount());
		req.setPlatform(request.getPlatform());
		try {
			return CLIENT.execute(req);
		} catch (ApiException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * taobao.tbk.shop.get (淘宝客店铺查询)
	 * 
	 * @param q
	 *            ("女装") 查询词
	 * @param sort
	 *            (commission_rate_des)
	 *            排序_des（降序），排序_asc（升序），佣金比率（commission_rate），
	 *            商品数量（auction_count），销售总数量（total_auction）
	 * @param is_tmall
	 *            是否商城的店铺，设置为true表示该是属于淘宝商城的店铺，设置为false或不设置表示不判断这个属性
	 * @param start_credit
	 *            信用等级下限，1~20
	 * @param end_credit
	 *            信用等级上限，1~20
	 * @param platform
	 *            链接形式：1：PC，2：无线，默认：１
	 * @param page_no
	 *            第几页，默认1，1~100
	 * @param page_size
	 *            页大小，默认20，1~100
	 * 
	 */
	public static TbkShopGetResponse queryShop(TbkShopGetRequest request) {
		TbkShopGetRequest req = new TbkShopGetRequest();
		req.setFields("user_id,shop_title,shop_type,seller_nick,pict_url,shop_url");
		req.setQ(request.getQ());
		req.setSort(request.getSort());
		req.setIsTmall(request.getIsTmall());
		req.setStartCredit(request.getStartCredit());
		req.setEndCredit(request.getEndCredit());
		req.setPlatform(request.getPlatform());
		req.setPageNo(request.getPageNo());
		req.setPageSize(request.getPageSize());
		try {
			return CLIENT.execute(req);
		} catch (ApiException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * taobao.tbk.item.recommend.get (淘宝客商品关联推荐查询)
	 * 
	 * @param num_iid
	 *            商品Id
	 * @param count
	 *            返回数量，默认20，最大值40
	 * @param platform
	 *            链接形式：1：PC，2：无线，默认：１
	 */
	public static TbkItemRecommendGetResponse queryItemRecommend(TbkItemRecommendGetRequest request) {
		TbkItemRecommendGetRequest req = new TbkItemRecommendGetRequest();
		req.setFields("num_iid,title,pict_url,small_images,reserve_price,zk_final_price,user_type,provcity,item_url");
		req.setNumIid(request.getNumIid());
		req.setCount(request.getCount());
		req.setPlatform(request.getPlatform());
		try {
			return CLIENT.execute(req);
		} catch (ApiException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * taobao.tbk.item.info.get (淘宝客商品详情（简版）)
	 * 
	 * @param num_iids
	 *            ("534963341347,526514943791")
	 *            商品ID串，用,分割，从taobao.tbk.item.get接口获取num_iid字段，最大40个
	 * @param platform
	 *            链接形式：1：PC，2：无线，默认：１
	 */
	public static TbkItemInfoGetResponse queryItemInfo(TbkItemInfoGetRequest request) {
		TbkItemInfoGetRequest req = new TbkItemInfoGetRequest();
		req.setFields("num_iid,title,pict_url,small_images,reserve_price,zk_final_price,user_type,provcity,item_url");
		req.setNumIids(request.getNumIids());
		req.setPlatform(request.getPlatform());
		try {
			return CLIENT.execute(req);
		} catch (ApiException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * taobao.tbk.item.get (淘宝客商品查询)
	 * 
	 * @param q
	 *            关键词
	 * @param cat
	 *            ("16,18") 后台类目ID，用,分割，最大10个，该ID可以通过taobao.itemcats.get接口获取到
	 * @param itemloc
	 *            所在地
	 * @param sort
	 *            (tk_rate_des )
	 *            排序_des（降序），排序_asc（升序），销量（total_sales），淘客佣金比率（tk_rate），
	 *            累计推广量（tk_total_sales），总支出佣金（tk_total_commi）
	 * @param is_tmall
	 *            是否商城商品，设置为true表示该商品是属于淘宝商城商品，设置为false或不设置表示不判断这个属性
	 * @param is_overseas
	 *            是否海外商品，设置为true表示该商品是属于海外商品，设置为false或不设置表示不判断这个属性
	 * @param platform
	 *            1：PC，2：无线，默认：1
	 * @param page_no
	 *            第几页，默认：１
	 * @param page_size
	 *            页大小，默认20，1~100
	 */
	public static TbkItemGetResponse queryItem(TbkItemGetRequest request) {
		TbkItemGetRequest req = new TbkItemGetRequest();
		req.setFields(
				"num_iid,title,pict_url,small_images,reserve_price,zk_final_price,user_type,provcity,item_url,seller_id,volume,nick");
		req.setQ(request.getQ());
		req.setCat(request.getCat());
		req.setItemloc(request.getItemloc());
		req.setSort(request.getSort());
		req.setIsTmall(request.getIsTmall());
		req.setIsOverseas(request.getIsOverseas());
		req.setPlatform(request.getPlatform());
		req.setPageSize(request.getPageSize());
		req.setPageNo(request.getPageNo());
		try {
			return CLIENT.execute(req);
		} catch (ApiException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * taobao.tbk.dg.item.coupon.get (好券清单API【导购】)
	 * 
	 * @param AdzoneId
	 *            mm_xxx_xxx_xxx的第三位
	 * @param q
	 *            关键词
	 * @param cat
	 *            后台类目ID，用,分割，最大10个，该ID可以通过taobao.itemcats.get接口获取到
	 * @param platform
	 *            1：PC，2：无线，默认：1
	 * @param page_no
	 *            第几页，默认：１
	 * @param page_size
	 *            页大小，默认20，1~100
	 */
	public static TbkDgItemCouponGetResponse queryItemCoupon(TbkDgItemCouponGetRequest request) {
		TbkDgItemCouponGetRequest req = new TbkDgItemCouponGetRequest();
		req.setAdzoneId(new Long(AdzoneId));
		req.setQ(request.getQ());
		req.setCat(request.getCat());
		req.setPlatform(request.getPlatform());
		req.setPageSize(request.getPageSize());
		req.setPageNo(request.getPageNo());
		try {
			return CLIENT.execute(req);
		} catch (ApiException e) {
			e.printStackTrace();
		}
		return null;
	}

}
